/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controle;

import Interface.FormPessoa;
import Modelo.Pessoa;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

/**
 * Classe responsável pelo controla da tabela pessoas
 * @author Jonas Gualberto Diel
 */
public class ControlaPessoa {

    Pessoa pessoa = null;
    JTable tbPessoas = null;
    ResultSet result = null;

    public ControlaPessoa() {

    }

    public ControlaPessoa(Pessoa pessoa, JTable tbPessoas) {
        this.pessoa = pessoa;
        this.tbPessoas = tbPessoas;
    }

    public boolean excluirPessoa()
    {
        int personId = pessoa.getPersonId();
        try
        {
            int resultado = FormPessoa.stmt.executeUpdate(
            "DELETE FROM basPerson WHERE personId = '"+personId+"'");
            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Insere uma nova pessoa na base de dados
    public boolean inserirPessoa() {
        
        //Define os atributos do objeto
        String name = pessoa.getName();
        String shortName = pessoa.getShortName();
        int cityId = pessoa.getCityId();
        String zipCode = pessoa.getZipCode();
        String location = pessoa.getLocation();
        int number = pessoa.getNumber();
        String complement = pessoa.getComplement();
        String neighborhood = pessoa.getNeighborhood();
        String email = pessoa.getEmail();
        String emailAlternative = pessoa.getEmailAlternative();

        try {

            int resultado = FormPessoa.stmt.executeUpdate(
            "insert into basPerson (name,shortName,cityId,zipCode,location,number,complement,neighborhood,email,emailAlternative,dateIn) values "
          + "('"+name+"','"+shortName+"','"+cityId+"','"+zipCode+"','"+location+"','"+number+"','"+complement+"','"+neighborhood+"','"+email+"','"+emailAlternative+"','now()')");

            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Edita uma pessoa na base de dados
    public boolean editarPessoa() {

        //Define os atributos do objeto
        int personId = pessoa.getPersonId();
        String name = pessoa.getName();
        String shortName = pessoa.getShortName();
        int cityId = pessoa.getCityId();
        String zipCode = pessoa.getZipCode();
        String location = pessoa.getLocation();
        int number = pessoa.getNumber();
        String complement = pessoa.getComplement();
        String neighborhood = pessoa.getNeighborhood();
        String email = pessoa.getEmail();
        String emailAlternative = pessoa.getEmailAlternative();

        try {

            int resultado = FormPessoa.stmt.executeUpdate(
            "update basPerson set name = '"+name+"', shortName = '"+shortName+"', cityId = '"+cityId+"', zipCode = '"+zipCode+"', location = '"+location+"', number = '"+number+"', complement = '"+complement+"', neighborhood = '"+neighborhood+"', email = '"+email+"', emailAlternative = '"+emailAlternative+"' WHERE personId = '"+personId+"'");

            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Popula os registros da base de dados na tabela
    public void popularTabela(Pessoa filtros) {

        Vector<String> cabecalhos = new Vector<String>();
        Vector dadosTabela = new Vector();
        cabecalhos.add("Codigo");
        cabecalhos.add("Nome");
        cabecalhos.add("Cidade");
        cabecalhos.add("E-mail");

        try {

            String sql = "SELECT A.personid, A.name, B.name, A.email FROM basPerson A INNER JOIN basCity B ON (A.cityId = B.cityId)";

            //Filtros
            if (filtros != null)
            {
                String where = "";
                if ( filtros.getPersonId() > 0)
                {
                    where = where + "AND A.personId = '" + filtros.getPersonId()+"'";
                }
                if (filtros.getName().length() > 0)
                {
                    where = where + "AND A.name ILIKE '"+filtros.getName()+"%'";
                }
                if ( where.length() > 0)
                {
                    sql = sql + " WHERE " + where.replaceFirst("AND", " ");
                }
            }
            sql = sql + "ORDER BY A.personid ASC";
            result = FormPessoa.stmt.executeQuery(sql);

            while (result.next()) {
                Vector<Object> linha = new Vector<Object>();
                linha.add(result.getInt(1));
                linha.add(result.getString(2));
                linha.add(result.getString(3));
                linha.add(result.getString(4));
                dadosTabela.add(linha);
            }
        } catch (Exception e) {
            System.out.println("problemas para popular tabela...");
            System.out.println(e);
        }
        tbPessoas.setModel(new DefaultTableModel(dadosTabela, cabecalhos) {

            @Override
            public boolean isCellEditable(int row, int column) {
                return false; //Não permite editar nenhuma coluna direto na tabela
            }
        });

        // permite seleção de apenas uma linha da tabela
        tbPessoas.setSelectionMode(0);

        // redimensiona as colunas de uma tabela
        TableColumn column = null;
        for (int i = 0; i < 3; i++) {
            column = tbPessoas.getColumnModel().getColumn(i);
            switch (i) {
                case 0:
                    column.setPreferredWidth(17);
                    break;
                case 1:
                    column.setPreferredWidth(140);
                    break;
                case 2:
                    column.setPreferredWidth(50);
                    break;
            }
        }

        //Altera as cores das colunas

//        tbPessoas.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
//
//            @Override
//            public Component getTableCellRendererComponent(JTable table, Object value,
//                    boolean isSelected, boolean hasFocus, int row, int column) {
//                super.getTableCellRendererComponent(table, value, isSelected,
//                        hasFocus, row, column);
//                if (row % 2 == 0) {
//                    setBackground(Color.CYAN);
//                } else {
//                    setBackground(Color.WHITE);
//                }
//                return this;
//            }
//        });
    }

    /**
     * Recebe o código da pessoa e retorna objeto com os dados populados
     * @param personId -- Código da pessoa
     * @return objeto da pessoa
     */
    public Pessoa obterPessoa(int personId)
    {
        try
        {
            String sql = "SELECT personid, name, shortName, email, emailAlternative, cityId, location, number, complement, neighborhood, zipCode FROM basPerson WHERE personId = '" + personId + "'";
            result = FormPessoa.stmt.executeQuery(sql);            
            while (result.next())
            {
                Pessoa dataPerson = new Pessoa();
                dataPerson.setPersonId(result.getInt(1));
                dataPerson.setName(result.getString(2));
                dataPerson.setShortName(result.getString(3));
                dataPerson.setEmail(result.getString(4));
                dataPerson.setEmailAlternative(result.getString(5));
                dataPerson.setCityId(result.getInt(6));
                dataPerson.setLocation(result.getString(7));
                dataPerson.setNumber(result.getInt(8));
                dataPerson.setComplement(result.getString(9));
                dataPerson.setNeighborhood(result.getString(10));
                dataPerson.setZipCode(result.getString(11));
                return dataPerson;
            }
        }
        catch (Exception e)
        {
            System.out.println("problemas para popular os campos...");
            System.out.println(e);
        }
        return null;
    }
}
